﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Flare.DB.Entity
{
    struct Equipment
    {
        public int? id_equipment { get; set; }
        public int? id_model { get; set; }
        public int? id_room { get; set; }
        public string bank_number { get; set; }
        public string abs_number { get; set; }
        public string hard_number { get; set; }
        public int? id_creator { get; set; }
        public string description { get; set; }
        public DateTime? date_create { get; set; }

        public IEnumerable<string> Validate()
        {
            if (id_model == null)
                yield return "Поле [Модель] должно иметь значение";

            if (id_room == null)
                yield return "Поле [Комната] должно иметь значение";

            if (string.IsNullOrEmpty(abs_number) == false && System.Text.RegularExpressions.Regex.IsMatch(abs_number, @"^UN\d\d\d\d$") == false)
                yield return "Поле [Инвентарный номер в УА] не соответствует формату";

            if (string.IsNullOrEmpty(bank_number) && string.IsNullOrEmpty(abs_number))
                yield return "Поле [Инвентарный номер в УА] или [Инвентарный номер в бухгалтерии] должно иметь значение";

            if (abs_number.Length > 6)
                yield return "Содержимое поля [Инвентарный номер в УА] превышает 6 символов";
            
            if (bank_number.Length > 6)
                yield return "Содержимое поля [Инвентарный номер в бухгалтерии] превышает 6 символов";

            if (id_creator == null)
                yield return "Поле [Автор записи] должно иметь значение";

            if (date_create == null)
                yield return "Поле [Дата создания записи] должно иметь значение";
        }
    }

    struct EquipmentView
    {
        public int id_equipment { get; set; }
        public string inventory_number { get; set; }
        public int id_type { get; set; }
        public string teh_type { get; set; }
        public string mark_model { get; set; }
        public string room { get; set; }
    }

    struct EquipmentMoveHistory 
    {
        public DateTime move_date { get; set; }
        public string tech_name { get; set; }
        public string inventory_number { get; set; }
        public string room { get; set; }
        public string description { get; set; }
        public string author { get; set; }
    }

    struct EquipmentDetails
    {
        public int id_equipment { get; set; }
        public int id_type { get; set; }
        public int id_mark { get; set; }
        public int id_model { get; set; }
        public int id_room { get; set; }
        public int id_department { get; set; }
        public string type { get; set; }
        public string mark { get; set; }
        public string model { get; set; }
        public string inventory_number { get; set; }
        public string factory_number { get; set; }
        public string room { get; set; }
        public string department { get; set; }
        public string description { get; set; }
        public DateTime date_create { get; set; }
        public IEnumerable<CeEntity.equipments_move_history> move_history { get; set; }
    }

    struct EquipmentType
    {
        public int? id_type { get; set; }
        public string type { get; set; }

        public IEnumerable<string> Validate()
        {
            if (id_type == null)
                yield return "Поле [ID TYPE] должно иметь значение";

            if (string.IsNullOrEmpty(type))
                yield return "Поле [Тип оборудования] должно иметь значение";
        }
    }

    struct EquipmentMark
    {
        public int? id_mark { get; set; }
        public int? id_type { get; set; }
        public string mark { get; set; }

        public IEnumerable<string> Validate()
        {
            if (id_type == null)
                yield return "Поле [Тип оборудования] должно иметь значение";
            
            if (id_mark == null)
                yield return "Поле [ID MARK] должно иметь значение";

            if (string.IsNullOrEmpty(mark))
                yield return "Поле [Марка оборудования] должно иметь значение";
        }
    }

    struct EquipmentModel
    {
        public int? id_model { get; set; }
        public int? id_mark { get; set; }
        public string model { get; set; }

        public IEnumerable<string> Validate()
        {
            if (id_mark == null)
                yield return "Поле [Марка оборудования] должно иметь значение";

            if (id_model == null)
                yield return "Поле [ID MODEL] должно иметь значение";

            if (string.IsNullOrEmpty(model))
                yield return "Поле [Модель оборудования] должно иметь значение";
        }
    }

    struct EquipmentModelAdvance
    {
        public int? id_model { get; set; }
        public int? id_mark { get; set; }
        public int? id_type { get; set; }
        public string model { get; set; }
    }
    struct EquipmentHistory
    {
        public int id_move { get; set; }
        public int id_equipment { get; set; }
        public DateTime move_date { get; set; }
        public string from_room { get; set; }
        public string to_room { get; set; }
        public string description { get; set; }
        public int id_author { get; set; }
    }
}
